#ifndef JUGADORDAO_H_
#define JUGADORDAO_H_

#include "ConectorMySql.h"
#include "Jugador.h"
#include "Lista.h"
#include <sstream>

class JugadorDAO {


	ConectorMySql* conector;

public:

	JugadorDAO(ConectorMySql *unConector){		
		this->conector = unConector;
	}

	string* getIdByUsername(const string& username){
		std::stringstream q;
		q << "SELECT idjugador FROM jugador j WHERE j.username = '" << username << "' ;" ;

		this->conector->conectar();
		this->conector->ejecutarConsulta(q.str());
		
		string * nombre = 0 ;
		char** res = this->conector->getNextResult();
		if(res){
			std::stringstream ss ;
			ss << res[0];
			nombre = new string(ss.str());
		}
		this->conector->desconectar();
		return nombre ;	
	}

	// Retorna el nombre correspondiente si existe el username
	string* getNombreByUsername(const string& username){
		std::stringstream q;
		q << "SELECT nombre FROM jugador j WHERE j.username = '" << username << "' ;" ;

		this->conector->conectar();
		this->conector->ejecutarConsulta(q.str());
		
		string * nombre = 0 ;
		char** res = this->conector->getNextResult();
		if(res){
			std::stringstream ss ;
			ss << res[0];
			nombre = new string(ss.str());
		}
		/*Si el query me dio un resultado se lo seteo al nombre*/

		this->conector->desconectar();
		return nombre ;
	}

	bool crearJugador(const string& username, const string& nombre, const string& passwd){
		std::stringstream q;
		q << "INSERT INTO jugador (username, nombre, passwd) VALUES ('" << username << "','" << nombre << "','" << passwd << "'); ";
		
		bool con = false ;
		con = this->conector->conectar();
		if(con){
			con = this->conector->ejecutarConsulta(q.str());
			this->conector->desconectar();
		}
		return con ;
	}

	bool isConexionValida(){
		bool con = this->conector->conectar();
		if(con)
			this->conector->desconectar();
		return con ;
	}

	bool validaJugador(const string& username, const string& passwd){
		/* SQL INJECTION a lo loco --jeje */
		std::stringstream q;
		q << "SELECT * FROM jugador j WHERE j.username = '" << username << "' and j.passwd = '" << passwd << "' ;" ;

		this->conector->conectar();
		this->conector->ejecutarConsulta(q.str());
		
		bool resultado = false;

		/* Verificar si el resultado de la consulta es un unico registro */
		int cont = 0;
		while(this->conector->getNextResult()){
			cont ++;
		}

		if( cont == 1 )
			resultado = true ;
		
		this->conector->desconectar();
		return resultado ;
	}

	Lista<string>* getListaNombres(){
		std::stringstream q;
		q << "SELECT username FROM jugador ;" ;

		this->conector->conectar();
		this->conector->ejecutarConsulta(q.str());
		
		Lista<string>* resultado = new Lista<string>;

		/* Verificar si el resultado de la consulta es un unico registro */
		char** res = this->conector->getNextResult() ;
		while(res){
			std::stringstream ss ;
			ss << res[0];
			resultado->agregar(new string(ss.str()));
			res = this->conector->getNextResult();
		}

		this->conector->desconectar();
		return resultado ;
	
	}

};

#endif